package cn.zhuzicc.reflect;

/**
 * @author zx
 * @version 1.0
 * @className: Test07
 * @description: 获取类加载器
 * @date: 2021/4/27 16:54
 */
public class Test07 {
    public static void main(String[] args) throws ClassNotFoundException {

        // 获取系统的类加载器
        ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
        System.out.print("获取系统的类加载器：");
        System.out.println(systemClassLoader);

        // 获取系统的类加载器的父类加载器 -> 扩展类加载器
        ClassLoader parent = systemClassLoader.getParent();
        System.out.print("获取系统的类加载器的父类加载器 -> 扩展类加载器：");
        System.out.println(parent);

        // 获取扩展类加载器的父类加载器 -> 根加载器（由C/C++提供）
        ClassLoader parent1 = parent.getParent();
        System.out.print("获取扩展类加载器的父类加载器 -> 根加载器（由C/C++提供）：");
        System.out.println(parent1);

        // 测试当前类是哪个类加载器加载的
        ClassLoader classLoader = Class.forName("cn.zhuzicc.reflect.Test07").getClassLoader();
        System.out.print("测试当前类是哪个类加载器加载的：");
        System.out.println(classLoader);

        // 测试JDK内置类是哪个类加载器加载的
        ClassLoader innerClass = Class.forName("java.lang.Object").getClassLoader();
        System.out.print("测试当前类是哪个类加载器加载的：");
        System.out.println(innerClass);

        // 如何获取系统类加载器可以加载的路径
        String[] split = System.getProperty("java.class.path").split(";");
        System.out.println(split.length);
        for (int i = 0; i < split.length; i++) {
            System.out.println(split[i]);
        }
    }
}
